// 【本质上，这种写法属于“模式匹配”，只要等号两边的模式相同，左边的变量就会被赋予对应的值】
let [a, b, c] = [1, 2, 3];
console.log(a, b, c); // 1 2 3

let [foo, [[bar], baz]] = [1, [[2], 3]];
console.log(foo, bar, baz); // 1 2 3

let [, , third] = ["foo", "bar", "baz"];
console.log(third); // "baz"

let [head, ...tail] = [1, 2, 3, 4];
console.log(head, tail); // 1 [ 2, 3, 4 ]

// 【解构不成功，y值为undefined】
let [x, y] = [1];
console.log(x, y); // 1 undefined

// 不完全解构
let [d, g] = [1, 2, 3];

// 【事实上，只要某种数据结构具有 Iterator 接口，都可以采用数组形式的解构赋值】
// Set 解构
let [j, k, l] = new Set(["a", "b", "c"]);
console.log(j, k, l); // a b c
